// 19.20
 function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} 
function reConstructBinaryTree(pre, vin)
{
    // write code here
    // 定义一个函数 构造二叉树
    // preRottId 是元素在前序遍历数组中的位置
    // vinl 中续遍历的左边界
    // vinr 中序遍历的右边界
    function construct(preRottId,vinl,vinr){
      // 递归退出条件
      if(vinl > vinr) return null // 加入左边界大于右边界
      var node = pre[preRottId] // 获得根节点
      var vinRootId = vin.indexOf(node) // 获得根节点在中序遍历中的位置 // 这个时候的node已经是数字了
      var leftSize = vinRootId - vinl // 获得左子树的大小
      var root = new TreeNode(node) // 生成根节点
      root.left = construct(preRottId+1,vinl,vinRootId-1) // 生成左子树
      root.right = construct(preRottId+leftSize+1,vinRootId+1,vinr) // 生成右子树 这里取得都是闭区间
      return root // 返回根节点
    }
    return construct(0,0,vin.length-1)
}
module.exports = {
    reConstructBinaryTree : reConstructBinaryTree
};